package homework.api01.apitest01;

public class StringDemo {
    public static void main(String[] args) {
        String s1 = "123abc";//字面量创建的字符串对象第一次使用时会存储到常量池中
        String s2 = "123abc";//复用常量池中的s1
        String s3 = "123abc";//复用s1
        String s4 = new String("654321");

        System.out.println(s4==s1);//F
        System.out.println(s1==s2);//T

        s1=s1+"!";//字符串是不变对象,修改意味着创建一个新的对象
        System.out.println(s1==s2);//false 地址不同 指向的对象不同//F

        String s = "123";
        String s5 = s+"abc";//这里编译器不操作 拼接会创建新的对象
        System.out.println(s5==s2);//false 没有重用常量池中的对象//F

        String s6 = "123"+"abc";//因为是纯(字面量/直接量)相加
        System.out.println(s6==s2);//触发预计算特性 直接复用常量池中的对象//T

        String s7 = "123abc";
        String s8 = new String("123abc");
        System.out.println(s7==s8);//false ==比较的是地址 指向的对象不同
        System.out.println(s7.equals(s8));//true equals判断的是内容

    }
}
